perm filename FCROX.JAM[UP,DOC] blob sn#002768 filedate 1972-10-06 generic text, type T, neo UTF8
	In an attempt to get people to use FAIL, the superior
assembler, a program has been written to help convert old
dusty MACROX programs into bright shiny FAIL programs. This
conversion program is called FCROX. It does not do a perfect
conversion, but it provides a significant start. The conversion
will be perfect if the program contains no IRP,IRPC,STOPI,IF1,
or IF2 statements, and contains no expressions of the form
↑D<expression> or of the form 69B<expression> or <expression>B69.
All the above exceptions are noted and the operator's attention is
called to them, except for the last two, which are exceptional
exceptions.
	To demonstrate how FAIL is different from MACROX, and how
FCROX works, the following table of mappings is provided:

   MACROX		   FAIL
↑D			=
IRP A			FOR X IN (A)
IRPC A			FOR X E <A>
	Note: FCROX does not replace all the following occurances
	of the symbol 'A' with another symbol, 'X'. You must do
	this yourself. Tough luck.
DEFINE A		DEFINE A'
←			⊗
=			←
[105			[105]
	Note: This last example is under the control
	of the pseudo-ops MLON and MLOFF. FCROX recognizes
	these ops and does the right thing.
"JAN			"JAN"
(POINT 6,0)		(<POINT 6,0>)
	Note: This is done because FAIL does not recognize
	an op code unless it is either the first symbol on a line,
	the first after a [, or the first after a <. In other
	words, (MOVE) would rate you an undefined symbol, but
	(<MOVE>) wouldn't.
MLON
MLOFF
	Note: These pseudo-ops are deleted after they are
	processed.
,COMMENT		;COMMENT



FEATURES NOT AVAILABLE IN FAIL THAT FCROX WILL WARN YOU ABOUT:
↑D<expression>
↑O
↑L
↑F
STOPI
IF1
IF2

FEATURES NOT AVAILABLE IN FAIL THAT FCROX WILL NOT WARN YOU ABOUT:
Generated symbols.
69B<expression>

DETAILS OF THE CARE AND FEEDING OF FCROX:

	To run FCROX, you call it into core in the usual manner 
(it uses 7K or so) and give it a normal CUSP command string terminated
by an alt-mode. FCROX won't do anything at all until you type an
alt-mode.
	If you wanted to convert some file named FOO to a FAIL file
and call it FOOBAZ, the following command string would do just that:
*DSK:FOOBAZ←DSK:FOO$
	Now, there is another great feature of FCROX-FAIL concerning
multiple MACROX files and their relation to block-structured FAIL
files. Namely, if you have lots of MACROX files that you eventually
end up loading at once, like is done with the system, FCROX will
convert this set of files into one block-structured FAIL file, which
trades loader time for a smaller amount of assembly time. Let us say
you want to combine the files APRSER and SCNSER into one file. The
following command string will do that:
*DSK:FOO←DSK:APRSER[1,SYS],SCNSER[1,SYS]$
	When multiple files are converted, the TITLE statements are
converted to BEGIN statements, and the ENDs are converted to BENDs, and
a single END is appended. Any EXTERNAL definition that is matched
in that set of files with an INTERNAL definition somewhere else is
deleted. Within the file containing the INTERNAL, when the symbol
is defined (by : or =) it is preceeded by an uparrow, indicating
to FAIL to communicate this definition to the other files. In this
manner, unnecessary INTERNAL-EXTERNAL fixups by the loader can be
eliminated.